package com.hn658.groupshare.core.service;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.hn658.framework.dataaccess.pagination.GenericPage;
import com.hn658.framework.shared.exception.BusinessException;
import com.hn658.framework.shared.exception.SystemException;
import com.hn658.groupshare.common.entity.RoleInfoEO;
import com.hn658.groupshare.common.entity.TreeNode;
import com.hn658.groupshare.common.entity.UserInfoEO;
import com.hn658.groupshare.common.expection.UserException;

public interface IUserInfoService {
	/**
	 * 根据帐号查找用户信息
	 * @param loginAccount
	 * @return
	 */
	public UserInfoEO findUserByAccount(String loginAccount);
	
	/**
	 * 根据id查找用户信息
	 * @param uid
	 * @return
	 */
	public UserInfoEO findUserByUid(Long uid);
	
	
	/**
	 * 根据uid集合返回用户信息
	 * @return
	 */
	public List<UserInfoEO> userInfoList(List<Long> uids);
	
	/**
	 * 查询用户信息
	 * @param queryMap
	 * @param limit
	 * @param start
	 * @param sortBy
	 * @param isAsc
	 * @return
	 */
	public GenericPage<UserInfoEO> queryUser(Map<String, Object> queryMap, int limit, int start,
			String sortBy, boolean isAsc);
	
	/**
	 * 查询所有用户信息
	 * @param queryMap
	 * @return
	 */
	public List<UserInfoEO> queryAllUser(Map<String, Object> queryMap);
	
	/**
	 * 修改用户信息
	 * @param userInfoEO
	 * @return
	 */
	public UserInfoEO modifyUserInfo(UserInfoEO userInfoEO) throws SystemException;
	
	/**
	 * 添加用户
	 * @throws BusinessException 
	 */
	public void addUser(UserInfoEO user) throws SystemException;
	
	/**
	 * 修改后台用户密码
	 * @param currentUser
	 * @param newPassword
	 * @return
	 */
	public UserInfoEO modifyCurrentUserPassword(UserInfoEO currentUser, String oldPassword, String newPassword,boolean isreset) throws SystemException;

	/**
	 * 通过ID启用用户
	 * @param id
	 */
	public UserInfoEO enableUser(Long id) throws SystemException;

	/**
	 * 通过ID禁用用户
	 * @param id
	 * @return 
	 */
	public UserInfoEO disableUser(Long id) throws SystemException;

	/**
	 * 
	 * <p>用户分配角色信息</p> 
	 * @author ztjie
	 * @date 2015-11-16 下午3:33:37
	 * @param uid 待分配的用户ID
	 * @param roleIds 待分配的角色ID列表
	 * @see
	 */
	public void authUserRoles(Long id, List<Long> roleIds);

	/**
	 * 
	 * <p>获取用户已经授权的角色信息列表</p> 
	 * @author ztjie
	 * @date 2015-11-14 下午8:10:30
	 * @param uid
	 * @return
	 * @see
	 */
	public List<RoleInfoEO> queryAuthedRoles(Long uid);

	/**
	 * 
	 * <p>获到未授权的角色信息列表</p> 
	 * @author ztjie
	 * @date 2015-11-14 下午8:23:27
	 * @param uid
	 * @return
	 * @see
	 */
	public List<RoleInfoEO> queryUnAuthedRoles(Long uid);

	/**
	 * 
	 * <p>查询用户可访问的权限URI</p> 
	 * @author ztjie
	 * @date 2015-12-4 下午1:26:23
	 * @param uid
	 * @return
	 * @see
	 */
	public Set<String> findUserAccessUris(Long uid);
	
	/**
	 * 
	 * <p>缓存用户权限相关信息</p> 
	 * @author ztjie
	 * @date 2015-12-4 下午8:41:54
	 * @param uid
	 * @throws UserException
	 * @see
	 */
	public void loadUserCacheInfo(Long uid) throws UserException;

	/**
	 * 
	 * <p>通过用户ID，获得用户菜单树</p> 
	 * @author ztjie
	 * @date 2015-12-4 下午11:34:40
	 * @param id
	 * @return
	 * @see
	 */
	public List<TreeNode> queryUserTreeNodes(Long id);
	
	/**
	 * 清楚redis缓存数据
	 */
	public void destroyUserCache(Long uid);
}
